package com.bookstore.backend.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bookstore.backend.exception.ServiceException;
import com.bookstore.backend.mapper.UserMapper;
import com.bookstore.backend.model.ResultVO;
import com.bookstore.backend.model.entity.User;
import com.bookstore.backend.model.req.UserListReq;
import com.bookstore.backend.service.UserService;
//import com.sun.org.apache.xpath.internal.operations.Bool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 统一登陆入口
     *
     * @param username 用户名
     * @param password 密码
     * @return 成功返回个人信息
     */
    @Override
    public ResultVO<User> login(String username, String password) {
        // 首先判断用户名是否存在
        final User user = userMapper.selectByUsername(username);

        // 不存在-> 返回错误信息
        if (user == null){
            return ResultVO.error("用户名不存在");
        }else{
            // 存在-> 判断用户名密码是否相同
            if (user.getPassword().equals(password)){
                //      相同-> 认证成功，返回个人信息
                return ResultVO.success("登录成功",user);
            }else{
                //      不相同 ->  返回密码错误的信息
                return ResultVO.error("密码错误");
            }
        }
    }

    public ResultVO<User> signup(String username, String password, String phone, String email, Boolean click){
        // 首先判断用户名是否存在
        final User oldUser = userMapper.selectByUsername(username);//判断是否存在于原用户名里

        if (oldUser == null){
            // 存在-> 判断用户名是否已存在
            if (password.length()>=6&&password.length()<=8){
                //密码格式正确→执行下一步
                if (phone.length()==11) {
                    String regex ="^[A-Za-z0-9\\u4e00-\\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
                    //定义匹配密码的正则表达式
                    if (email.matches(regex)){
                        if (click == false){
                            return ResultVO.error("可注册");//这个一般不会碰到
                        }else {
                            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
                            Date time = new Date(System.currentTimeMillis());//获取当前时间
                            userMapper.signup(
                                    username,"男",phone,email,time,"0","0",password);//id需要改一改
                            return ResultVO.success("注册成功");//注册成功在这
                        }
                    }else{return ResultVO.error("邮箱格式不正确");}
                }else{return ResultVO.error("电话格式不正确");}
            }else{return ResultVO.error("密码格式不正确");} // 不相同 ->  返回密码错误的信息
        }else{return ResultVO.error("用户名已存在!");//   用户名已存在,返回错误信息
        }
    }

    @Override
    public List<User> list(UserListReq listReq) {
        return userMapper.selectList(listReq);
    }

    @Override
    public Integer insert(User user) {
        if (user.getPassword() == null){
            throw new ServiceException("密码不能为空");
        }
        return userMapper.insert(user);
    }

    @Override
    public Integer deleteNumByuid(Integer userId) {
        Integer integer = userMapper.deleteNumByuid(userId);
        if (integer == 0){
            throw new ServiceException("请选择用户");
        }
        return integer;
    }



    public IPage<User> selectUserPage(Page<User> page,Integer state){
        return userMapper.selectPageVO(page,state);
    }

    @Override
    public Integer updateNumByuid(User user) {
        return userMapper.updateNumByuid(user);
    }

}